const fs = require("fs").promises;
const path = require("path");
const fsExtra = require("fs-extra"); // 需要额外安装的库

async function deleteTargets(rootDir, targets) {
  /**
   * 递归删除指定目录下的目标文件/文件夹
   * @param {string} rootDir - 起始目录（当前目录用'.'）
   * @param {string[]} targets - 要删除的目标名称列表
   */
  try {
    // 读取当前目录下的所有内容
    const entries = await fs.readdir(rootDir, { withFileTypes: true });

    for (const entry of entries) {
      const fullPath = path.join(rootDir, entry.name);

      // 检查是否为目标
      if (targets.includes(entry.name)) {
        try {
          if (entry.isDirectory()) {
            // 删除文件夹（递归删除所有内容）
            await fsExtra.remove(fullPath);
            console.log(`已删除文件夹: ${fullPath}`);
          } else {
            // 删除文件
            await fs.unlink(fullPath);
            console.log(`已删除文件: ${fullPath}`);
          }
        } catch (e) {
          console.log(`删除失败 ${fullPath}: ${e.message}`);
        }
      }
      // 如果是目录且不是目标，递归处理子目录
      else if (entry.isDirectory()) {
        await deleteTargets(fullPath, targets);
      }
    }
  } catch (e) {
    console.log(`遍历目录失败 ${rootDir}: ${e.message}`);
  }
}

// 主函数
async function main() {
  // 要删除的目标列表（可根据需要添加）
  const targetsToDelete = [
    "node_modules",
    "dist",
    "package-lock.json",
    "yarn.lock",
    ".cache",
  ];

  // 从当前目录开始删除
  await deleteTargets(".", targetsToDelete);
  console.log("删除操作完成");
}

// 执行主函数
main();
